#include <iostream>
#include <vector>
// 给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
// 不会

using std::cout;
using std::vector;

class Solution {
public:
    vector<int> spiralOrder(const vector<vector<int>>& matrix) {
        vector<int> v;
        v.resize(matrix.size() * matrix[0].size(),0);
        int loc = 0;
        if(matrix.size() == 1 || matrix[0].size() == 1)
        {
            // 只有一行 或 // 只有一列
            for(auto &it1 : matrix)
            {
                for(auto &it2 : it1)
                {
                    v[loc ++] = it2;
                }
            }
            return v;
        }

        

        int length = matrix[0].size();
        int width = matrix.size();

        int circle;
        int i,j;
        
        i = j = circle = 0;
        
        while(i < length / 2 || j < width / 2)
        {
            int flag = 0;
            // 上边
            while(i < matrix[0].size() - 1 - circle)
            {
                v[loc ++] = matrix[j][i ++];
            }

            // 右边
            while(j < matrix.size() - 1 - circle)
            {
                v[loc ++] = matrix[j ++][i];
                flag  = 1;
            }

            if(flag == 0) break;
            // 下边
            while(i > circle)
            {
                v[loc ++] = matrix[j][i --];
            }

            // 左边
            while(j > circle)
            {
                v[loc ++] = matrix[j --][i];
            }

            ++ i;
            ++ j;
            ++ circle;
        }

        v[loc] = matrix[width / 2][length / 2];
        return v;

    }
};

int main(int argc, char const *argv[])
{
    Solution s;
    s.spiralOrder({{3},{2}});
    return 0;
}
